package base.map.findPath
{
	/**
	 *生成寻路网格时算法处理的方向，相对于当前已经生成合并的网格分为下(1)、右(2)
	 * @author devin
	 * 
	 */	
	public class FindPathBuildNodeDirection
	{
		/**
		 *相对于当前网格的下方 
		 */		
		public static const BOTTOM:int = 1;
		/**
		 *相对于当前网格的右方 
		 */		
		public static const RIGHT:int = 2;
		/**
		 *无可用方向 
		 */		
		public static const NOTHING:int = 0;
		
		/**
		 *当前正处于的检查方向 
		 */
		private var _direction:int=-1;//下(1)、右(2)
		
		/**
		 *当前被禁用掉的合并方向 
		 */		
		private var _disableDirections:Array=[];
		
		public function FindPathBuildNodeDirection()
		{
		}
		
		/**
		 *取得下一个合并方向 
		 * @return 返回方向，如果取不到方向值，则返回0，0代表无可用方向
		 * 
		 */		
		public function nextDirection():int
		{
			switch(_direction)
			{
				case -1:
				case RIGHT:
					if(checkDirectionIsDisable(BOTTOM))
					{
						if(!checkDirectionIsDisable(RIGHT))
						{
							_direction=BOTTOM;
							return nextDirection();
						}
					}
					else
					{
						_direction=BOTTOM;
						return BOTTOM;
					}
					break;
				case BOTTOM:
					if(checkDirectionIsDisable(RIGHT))
					{
						if(!checkDirectionIsDisable(BOTTOM))
						{
							_direction=RIGHT;
							return nextDirection();
						}
					}
					else
					{
						_direction=RIGHT;
						return RIGHT;
					}
					break;
			}
			return NOTHING;
		}
		
		/**
		 * 增加被禁用的方向
		 * 
		 */		
		public function addDisableDirection(direction:int):void
		{
			if(_disableDirections.indexOf(direction)!=-1)return;
			_disableDirections.push(direction);
		}
		
		/**
		 *检查当前合并方向是否被禁用 
		 * @param direction 方向
		 * @return 如果被禁用返回true
		 * 
		 */
		private function checkDirectionIsDisable(direction:int):Boolean
		{
			return _disableDirections.indexOf(direction)!=-1;
		}
		
		/**
		 *重置为初始值 
		 * 
		 */		
		public function reset():void
		{
			_direction=-1;
			_disableDirections.length=0;
		}
	}
}